import CryptoJS from 'crypto-js'

// 加密密钥 (建议存储在环境变量中)
const CRYPTO_KEY = import.meta.env.VITE_CRYPTO_KEY || 'congmingyongganyopuliqi'

/**
 * AES 加密
 * @param data 要加密的数据
 * @param key 加密密钥，可选
 */
export function encrypt(data: string, key?: string): string {
    const secretKey = key || CRYPTO_KEY
    return CryptoJS.AES.encrypt(data, secretKey).toString()
}

/**
 * AES 解密
 * @param cipherText 密文
 * @param key 解密密钥，可选
 */
export function decrypt(cipherText: string, key?: string): string {
    const secretKey = key || CRYPTO_KEY
    const bytes = CryptoJS.AES.decrypt(cipherText, secretKey)
    return bytes.toString(CryptoJS.enc.Utf8)
}

/**
 * MD5 哈希
 * @param data 要哈希的数据
 */
export function md5(data: string): string {
    return CryptoJS.MD5(data).toString()
}

/**
 * SHA256 哈希
 * @param data 要哈希的数据
 */
export function sha256(data: string): string {
    return CryptoJS.SHA256(data).toString()
}

/**
 * Base64 编码
 * @param data 要编码的数据
 */
export function base64Encode(data: string): string {
    return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data))
}

/**
 * Base64 解码
 * @param data 要解码的数据
 */
export function base64Decode(data: string): string {
    return CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8)
}

/**
 * HMAC-SHA256 签名
 * @param data 要签名的数据
 * @param key 密钥
 */
export function hmacSha256(data: string, key: string): string {
    return CryptoJS.HmacSHA256(data, key).toString()
}

/**
 * 生成随机字符串
 * @param length 长度，默认16
 */
export function generateRandomString(length = 16): string {
    return CryptoJS.lib.WordArray.random(length / 2).toString()
}

// 导出所有方法
export default {
    encrypt,
    decrypt,
    md5,
    sha256,
    base64Encode,
    base64Decode,
    hmacSha256,
    generateRandomString
}